草庐IT

带指针的 C++ vector

全部标签

c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?

我有一种情况,我正在通过一个vector行进,做一些事情:std::vector::iteratoriter=my_list.begin();for(;iter!=my_list.end();++iter){if(iter->doStuff())//returnstrueifsuccessful,falseo/w{//Keepgoing...}else{for(;iter!=m_list.begin();--iter)//...Thiswon'twork...{iter->undoStuff();}}}在正常情况下-假设一切顺利-我一直前进到my_list.end()并成功结束循环。但

c++ - 在运行时设置 vector 类型

我有一个程序需要在程序执行时设置vector的类型(根据配置文件中的值)。我试过这个:inta=1if(a==1)vectortest(6);elsevectortest(6);test.push_back(3);但这给了我:Error1errorC2065:'test':undeclaredidentifier我不完全确定为什么,但我认为这是因为vector实际上并不是在编译时决定的,因此编译器在编译其余代码时无法使用它。有没有一种方法可以像我上面尝试的那样在运行时决定vector的类型?我曾尝试在if之外创建一个版本,然后将其删除并在IF内重新编写新版本。但是,这感觉不对,无论如何

c++ - 引用指针的可选参数?

如何将第二个参数声明为可选?templateinlinevoidDelete(T*&MemoryToFree,T*&MemoryToFree2=){deleteMemoryToFree;MemoryToFree=NULL;deleteMemoryToFree2;MemoryToFree2=NULL;}我在=运算符之后尝试了几种方法,例如NULL、(T*)NULL等。这可以做到吗?编译器让我这样做的唯一方法是使用重载...templateinlinevoidDelete(T*&MemoryToFree,T2*&MemoryToFree2){deleteMemoryToFree;Memor

c++ - 为什么STL中的 vector 没有+=运算符

我很好奇?什么高本底逻辑背后没有实现:result+=vector1;result和vector1都是STLvector。注意:我知道如何实现那个位,但我需要知道设计STL的圣人在选择不实现此功能时使用的是什么逻辑? 最佳答案 您希望result包含什么,将原始result与vector1或元素级+连接起来的结果=(无论这对底层类型意味着什么),如果大小不匹配,可能会默认初始化成员?是的,这是一个答案;)。运算符重载仅应在运算的含义对于基础类型而言明确且实用的情况下使用,并且它会为适当命名的函数调用提供显着的符号简洁性。请注意,由于

c++ - 使用指针交换值

我有这段代码inti=5;intk=7;int*iPtr;int*jPtr;int*kPtr;iPtr=&i;kPtr=&k;我需要使用指针交换i和k。我就是这样做的:*jPtr=*kPtr;*kPtr=*iPtr;*iPtr=*jPtr;这是最好的方法,还是有更好的方法? 最佳答案 在我看来,在C++中做到这一点的最佳方法是使用std::iter_swap():#include//...int*iPtr=&i,*kPtr=&k;std::iter_swap(iPtr,kPtr);您可能认为这是一种矫枉过正,但如果您包括我会不同意反

c++ - C/C++ 指针,ptr+1 = ptr +1 byte 还是 ptr+1*sizeof(pointer_type)?

有any_type*ptr=(any_type*)malloc(sizeof(any_type)*size);my_ptr=ptr+1;memcpy(dst,my_ptr,sizeof(any_type));my_ptr会指向ptr之后的1个字节,还是指向ptr之后的sizeof(any_type)字节?对齐选项如何影响答案?有符号/无符号类型是否不同? 最佳答案 指针运算是在指针的静态类型[*]的大小上进行的,所以它会有效地添加sizeof*ptr。成员的对齐方式将作为类型的对齐方式(对象末尾的填充)考虑到对象的大小。struct

c++ - 用于 vector 和矩阵计算的高性能数学库

在哪里可以找到vector和矩阵计算的快速库?我需要高性能。更新:我需要它来进行游戏计算。 最佳答案 寻找Blaze.还要检查并行核心设置中的基准标记。它当然是最快的。 关于c++-用于vector和矩阵计算的高性能数学库,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5935075/

C++ std::vector std::sort 无限循环

每当我尝试对导致无限循环的对象vector进行排序时,我都会遇到一个问题。我正在使用传递给排序函数的自定义比较函数。我能够通过在两个对象相等而不是true时返回false来解决问题,但我不完全理解解决方案。我认为这是因为我的比较函数违反了cplusplus.com上概述的这条规则:Comparisonfunctionobjectthat,takingtwovaluesofthesametypethanthosecontainedintherange,returnstrueifthefirstargumentgoesbeforethesecondargumentinthespecific

c++ - 当我们分配一个指针为 NULL 时会发生什么?

我有一个指向一些数据的指针。现在我已经创建了一个类似的指针。现在这个新指针被分配给旧指针。如果我删除旧的会发生什么?A*a=newA();A*b=a;a=NULL;“a”和“b”会发生什么?此外,如果我做以下事情:A*a=newA();A*b=a;deletea;而且我还想知道当我们赋值为NULL时指针会发生什么。A*a=newA();a=NULL;a仍然指向一些内存还是什么都不指向? 最佳答案 A*a=newA();A*b=a;a=NULL;在此之后,b仍然指向第一行分配的对象。a现在什么都不指向了。您仍然可以通过b指针“使用”该

c++ - 使用 std::map 而不是 vector<pair<string, string>> 我会看到性能提升吗?

我目前有一些代码在使用vector的pair.这用于存储来自XML解析的一些数据,因此,这个过程在某些地方非常慢。在尝试加快整个过程方面,我想知道从vector>切换是否会有任何性能优势。至std::map?我可以对其进行编码并运行分析器,但我想我会先看看是否能得到一个表明一些明显的性能提升的答案。我不需要做任何排序,我只是将项目添加到vector中,然后在稍后阶段迭代内容并进行一些处理——我不需要排序或任何类似的东西。我猜也许我不会获得任何性能提升,但我从未真正使用过std::map之前,所以如果不询问或编写代码我就不知道了。 最佳答案